package copy;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 聊天室客户端
 */

public class Client {
	/*
	 * java.net.Socket 套接字
	 * Socket封装了TCP协议的通许细节，
	 * 使得我们可以直接以两个流的形式与远端计算机进行TCP的数据交互
	 */
	private Socket socket;
	private InputStream clientInput;
	private OutputStream clientOutput;
	private ArrayList<Clienter> clientList;
	/*
	 * 构造方法初始化客户端
	 * 
	 */
	public Client() {
		try {
			/*
			 * 实例化socket时常用的构造方法为
			 * Socket(String host,int port)
			 * 参数1：服务端的ip地址信息
			 * 	localhost则表示本机
			 * 参数2:服务的端开启的服务端口
			 * 0-65535之间的数字
			 * 注意：实例化Socket的过程就是与服务端建立连接的过程
			 * 如果建立失败则会抛出异常。
			 * 
			 * 通过 ip地址我们可以找到远端的计算机，
			 * 通过端口用于找到运行在该机器上的服务端应用程序
			 * 随之与其建立连接
			 */
			System.out.println("正在连接服务器.......");		
			socket = new Socket("178.120.12.252",8088);
			System.out.println("与服务端连接成功.......");
			
		} catch (IOException e) {
			System.out.println(e.getMessage());
		}
	}
	/*
	 * 客户端开始工作的方法
	 */
	public void start() {
		try (
				Scanner scan =new Scanner(System.in);
				){
			clientInput=socket.getInputStream();
			clientOutput=socket.getOutputStream();
			PrintWriter pw =PrintWBufferedR.getPW(clientOutput);
			BufferedReader br=PrintWBufferedR.getBR(clientInput);
			ObjectOutputStream oos=ObjectStream.getObjOutStream(clientOutput);
			ObjectInputStream ois=ObjectStream.getObjInStream(clientInput);		
			//创建一个线程用来读取服务器的发过来的消息
			Thread thread=new Thread() {
				public void run() {
					String info=null;
					Object obj=null;
					try {
						while((info=br.readLine())!=null) {		
							obj=ois.readObject();
							System.out.println(obj);
//							obj=ois.readObject();
							
							//System.out.println(obj);
							System.out.println(info);
//							if(obj instanceof ArrayList) {
//								ArrayList<User> users=(ArrayList<User>) obj;
//								for(User u:users) {
//									System.out.println(u);
//								}
//							}									
							
						}
					} catch (IOException | ClassNotFoundException e) {
						e.printStackTrace();
					}
				}				
			};
			thread.start();
			System.out.println("开始聊天");
			while(true) {
				String info = scan.next();
				pw.println(info);
				if("exit".equals(info.trim().toLowerCase())) {
					break;
				}
			}	
		} catch (IOException e) {
			System.out.println(e.getMessage());
		}	
	}
	public static void main(String[] args) {
		Client client = new Client();
		client.start();
	}
}
